//配置axios

import axios from "axios"

import ElementUI from "element-ui"

import router from "../router/index"

let server = axios.create({
    baseURL: "/api",//基础地址
    timeout: 1000 * 20,
    withCredentials: true //允许本地携带认证给服务端 cookie传递需要开启这个属性
})

//响应拦截器 
server.interceptors.response.use(function (config) {
    // console.log(ElementUI)
    //config 就是响应配置
    // console.log(config)
    //接口有个相同的地方就是 只要数据响应是错误的 state都是false
    let { data } = config;//把后台响应的数据 从config中解构出来
    //由于获取验证码这个接口,返回的字段只有img,没有state,所以我们要排除获取验证码这个接口
    if (!data.state && config.config.url !== "/users/getCaptcha") {
        // console.log('判断成立了')
        //表示数据响应了,但是有错误
        // alert(data.msg)

        ElementUI.MessageBox.alert(data.msg, '错误', {
            confirmButtonText: '确定',
            type: 'error'
        })
        if (data.code === "10022" || data.code === "1004") {
            //判断状态码是不是10022或者1004
            //10022是后台主观设置的 表示登入过期了
            //1004也是后台主观设置的 表示token过期了
            //1.清除token
            localStorage.removeItem('yf-token')
            //2.跳转到登入页
            router.push('/login')
            //3.刷新页面
            location.reload()
        }

        return config //返回去的目的就是为了不让项目直接报错
    } else {
        //如果要让拦截器放行 需要return config
        return config
    }


})

//请求拦截器 会拦截所有请求

server.interceptors.request.use(function (config) {
    //config就是请求对象
    // console.log(config)
    //除了登入 获取验证码 校验验证码

    let excludePath = ["/users/getCaptcha", "/users/login", "/users/verifyCaptcha"] //不需要添加token的路径

    //config.url 是拦截到的请求对象的请求url
    //如果上述排除需要添加token的路径中 包含了当前请求对象中的url路径 那么直接放行就行了
    let flag = excludePath.includes(config.url)
    if (flag) {
        return config
    } else {
        //将token携带在请求头
        //从本地将token获取
        let token = localStorage.getItem('yf-token');
        //authorization这个字段是什么 由后台决定的
        config.headers.authorization = token
        return config
    }
})


export default server

